<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ECMA基础测试</title>
</head>

<body>
    <script>
        //  1.  Javascript 的基础类型有几大类？分别又有哪几种类型？（5）
        // 有6大类 分别是 String(字符串)，number(数字),Boolean(布尔)，null,undefined

        //  2.  如何进行数据类型的判断？有哪几种，分别可以判断到什么程度？（5）
          // typeof，instanceOf
        // typeof可以判断基本数据类和函数对象 
        // instanceOf用于检测某个对象是不是某个类的实例(返回布尔值)


        //  3.  undefined 和 null 的区别？什么时候会得到undefined？（5）
       //  null表示空的 undefined表示定义没有赋值 如果被定义 没有赋值就会显示undefined
         
        //  4.  使用 continue 或 break 终止循环时，两种方式的区别是？（5）
        // 使用continue是可以执行下一个语句 不会跳出循环  使用break是终止循环时不会执行下一个语句 直接跳出循环

        //  5.  如何判断字符串内是否包含指定字符？（5）
         // 使用indexOf方法 返回某个字符串首次出现的下标，如果没有则返回-1
         
        //  6.  请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
        // concat()合并，join()转成字符串
        //  slice(index,lastIndex)截取 不要改变原数组 ,splice(index,length,ele)截取 会改变原数组
        // push() 数组末尾添加 unshift()数组前面添加 会改变原数组 ，pop()移除数组末尾最后一项 shift()数组移除前面的 会改变原来的数组,
         // 遍历方法 forEach() ,some(),every(),filter(),map(),reduce(),sort()
        //  7.  输出从小到大排序好的五个不重复的随机"素数",范围[10-58)；（10）

              
        //  8.  请写出以下输出的结果；（10）
        var bar = true, number = 0;
        console.log(bar + 0); // 1
        console.log(bar + "xyz"); // truexyz
        console.log(bar + true); //  2
        console.log(+true); // 1
        console.log(!'bluej');// false
        console.log(number++); // 0
        console.log(++number); //1
        console.log(number); // 0  

        //  9.  什么是事件委托，为什么需要事件委托？如何实现事件委托？(用代码实现)（10）
        //  子元素事件会冒泡到父元素身上的原理实现子元素上触发事件，因为子元素有很多需要每个子元素添加事件功能，这会导致内存消耗，还有对每个元素进行一次事件绑定的操作 所有使用事件委托
        // let ul =document.querySelector('ul')
        //  ul.addEventListener('click',function (e) {
        //      console.log(e.target);
        //  })
        //  10. 将多个数组进行合并去重；（10）
        // var arr1 = [1, 2, 3], arr2 = [2, 3, 4, 5];
        // 使用concat()方法合并
        // let newArr1 = arr1.concat(arr2)
        // 使用es6新的...表达式合并
        // let newArr2 = [...arr1,...arr2]
        // console.log(newArr2);
        // let arr3 =[...new Set(newArr2)]
        // console.log(arr3);
        
        //  11. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
       /*  var arr3 = [
            { name: "111", sex: "boy", age: 18, count: 20 },
            { name: "222", sex: "girl", age: 17, count: 30 },
            { name: "333", sex: "boy", age: 16, count: 40 },
            { name: "444", sex: "girl", age: 15, count: 50 },
            { name: "555", sex: "boy", age: 20, count: 60 },
            { name: "666", sex: "girl", age: 13, count: 70 },
            { name: "777", sex: "boy", age: 14, count: 80 }
        ]
       let arr4 =[ ]
       arr3.forEach(function (item,index) {
           if (item.age<18) {
               item.count = Math.pow(item.count,2);
               arr4.push(arr3[index])
               
           }
       })
       console.log(arr4); */
        //  12. 简述一下什么是深浅拷贝？怎么实现深浅拷贝？（20）
       // 浅拷贝 如果拷贝的是基本数据类型，拷贝的是类型的值，如果引用数据类型拷贝的是内存地址
        //深层次的引用类型则共享内存地址

    </script>
</body>

</html>